/*
 *队列学习
 *2018.11.15
 *队列的初始化与建立
*/

#include <stdio.h>
#include <stdlib.h>
 
#include "tree.h"
#include "queue.h"
#include "debug.h"



queue creat_queue(int max_size) {
	queue Q = (queue)malloc(sizeof(struct q_node));/*申请一个队列结构体指针指向的空间（大小为结构体变量所占的空间大小），*/
	Q->data = (bin_tree *)malloc(max_size * sizeof(bin_tree));/*为队列需要存的数据申请空间，用要存的数据类型的指针指向这片空间*/
	Q->front = Q->rear = 0;
	Q->max_size = max_size;
	return Q;
}

int is_full(queue Q) {
	return ((Q->rear+1) % Q->max_size == Q->front);
	/*环形队列判断队列判断队列满，如果 尾巴+1 = 头，说明装满了，*/
	/*为了解决跨越队尾的问题，用队尾+1 然后对 队列的大小求余 ，*/
	/*小数对大数求余等于小数本身*/
}

int add_q(queue Q, bin_tree X) {
	if(is_full(Q)) {
		printf("队列满");
		return false;
	}
	else {
		Q->rear = (Q->rear+1) % Q->max_size;//
		Q->data[Q->rear] = X;
		return ture;
	}
}

int is_empty(queue Q) {
	return (Q->front == Q->rear);//首尾相等的时候，队列为空
}

bin_tree delete_Q(queue Q) {
	if(is_empty(Q)) {
		printf("队列空");
		//return ERROR;
	}
	else {
		Q->front = (Q->front + 1) % Q->max_size;
		return Q->data[Q->front]; 
	}
}
